BootDevice - Preparing a boot device for I86 platforms
No user-callable routines
This file contains informations for the PREPARING A BOOT DEVICE section of the board support package (BSP) target.ref file:
Romable images intended for a disk can be copied to the device using the DOS boot utility mkboot.bat or the VxWorks boot utilities mkbootFd( ) for floppy disks or mkbootAta( ) for hard disks. The boot loader searches the disk for the file bootrom.sys. Boot files with the .bin extension may be renamed to bootrom.sys.
At this point, the instructions fork into separate sets of that apply to Linux, Windows and VxWorks itself.
Use /usr/bin/fdformat, /usr/bin/mformat, /sbin/dosfsck that comes with Linux and mtools tool. It requires a bootstrap loader file called vxld.bin located in your GPP directory tree at $WIND_BASE/host/$WIND_HOST_TYPE/bin/vxld.bin
Insert a 1.44MB diskette into the diskette drive, login as root and issue the fdformat command to format the diskette.
> fdformat /dev/fd0 Double-sided, 80 tracks, 18sec/track. Total capacity 1440kB. Formatting ... Verifying ...Format the floppy with FAT12 file system and specified boot sector:
> mformat a: -B $WIND_BASE/host/$WIND_HOST_TYPE/bin/vxld.binCheck the floppy disk:
> dosfsck -v /dev/fd0 dosfsck 2.11 (12 Mar 2005) dosfsck 2.11, 12 Mar 2005, FAT32, LFN Checking we can access the last sector of the filesystem Boot sector contents: System ID "IBM 3.3" Media byte 0xf0 (5.25" or 3.5" HD floppy) 512 bytes per logical sector 512 bytes per cluster 1 reserved sector First FAT starts at byte 512 (sector 1) 2 FATs, 12 bit entries 4608 bytes per FAT (= 9 sectors) Root directory starts at byte 9728 (sector 19) 224 root directory entries Data area starts at byte 16896 (sector 33) 2847 data clusters (1457664 bytes) 18 sectors/track, 2 heads 0 hidden sectors 2880 sectors total Checking for unused clusters. /dev/fd0: 0 files, 0/2847 clustersMount the diskette and copy the bootrom image to it. Use cp for bin images or objcopypentium for all other images.
> mount /dev/fd0 /floppy/ > cp bootrom.bin /floppy/bootrom.sys or > objcopypentium -O binary bootrom /floppy/bootrom.sysUmount the diskette:
> umount /dev/fd0
$WIND_BASE\target\config\<bsp_name>\> format a: /v /q Insert new disk for drive A: and press ENTER when ready... The type of the file system is FAT. Verifying 1.44M Format complete. Volume label (11 characters, ENTER for none)? 1457664 bytes total disk space. 1457664 bytes available on disk. 512 bytes in each allocation unit. 2847 allocation units available on disk. Volume Serial Number is 307A-4ACB Format another (Y/N)? n $WIND_BASE\target\config\<bsp_name>\> mkboot a: bootrom.bin VxSys 1.6 (c) Wind River 1993-2002 Boot sector installed OK. 1 file(s) copied. System transferred. Checking a:BOOTROM.SYS is contiguous chkdsk a:bootrom.sys The type of the file system is FAT. Volume Serial Number is D4CF-F52B Windows is verifying files and folders... File and folder verification is complete. Windows has checked the file system and found no problem. 1,457,664 bytes total disk space. 271,360 bytes in 1 files. 1,186,304 bytes available on disk. 512 bytes in each allocation unit. 2,847 total allocation units on disk. 2,317 allocation units available on disk. All specified file(s) are contiguous.mkboot.bat writes the boot sector containing the boot loader onto the floppy disk. Then mkboot copies the boot file to the floppy disk and checks to ensure the boot file is contiguous. The user must pay attention to the output and ensure the boot file is reported as contiguous. The boot loader will not properly handle a non-contiguous boot files.
An alternative to mkboot.bat is to manually invoke:
format
use $WIND_BASE\host\$WIND_HOST_TYPE\bin\vxsys to create a boot sector
use copy for boot images with a .bin extension
use objcopypentium for all other boot images
For example:
$WIND_BASE\target\config\<bsp_name>\> format a: /v /q Insert new disk for drive A: and press ENTER when ready... The type of the file system is FAT. QuickFormatting 1.44M Format complete. Volume label (11 characters, ENTER for none)? 1457664 bytes total disk space. 1457664 bytes available on disk. 512 bytes in each allocation unit. 2847 allocation units available on disk. Volume Serial Number is DC31-1143 QuickFormat another (Y/N)? n $WIND_BASE\host\x86-win32\bin> vxsys a: VxSys 1.6 (c) Wind River 1993-2002 Boot sector installed OK.Now copy the boot image to the floppy. For .bin images use copy
$WIND_BASE\target\config\<bsp_name>\> copy bootrom.bin a:bootrom.sysFor all other images use objcopypentium
$WIND_BASE\host\x86-win32\bin\objcopypentium -O binary --gap-fill=0 bootrom a:bootrom.sysNow verify that the file is contiguous. Non contiguous images will not boot.
$WIND_BASE\target\config\<bsp_name>\> chkdsk a:bootrom.sys The type of the file system is FAT. Volume Serial Number is DC31-1143 CHKDSK is verifying files and directories... File and directory verification completed. 1457664 bytes total disk space. 493056 bytes in 1 user files. 964608 bytes available on disk. 512 bytes in each allocation unit. 2847 total allocation units on disk. 1884 allocation units available on disk. All specified file(s) are contiguous.You may also use a hard disk to boot VxWorks. You must boot from a primary bootable partition on the primary disk as seen by the PC BIOS.
It is recommended that you use FDISK or a similar utility to create the primary bootable partition. The reason is that FDISK uses PC BIOS calls to create the disks master boot record. The BIOS is responsible for loading the boot loader during the boot process. Therefore, a utility that uses the BIOS to write partitions, such as FDISK, is recommended.
The partition and file system on the disk may be either FAT12, or FAT16, or VxWorks proprietary VXLONGNAMES file system. FAT32 is not supported by the boot loader. If you need FAT32, make a small primary boot partition that is FAT16, and a second larger partition that is FAT32 atop the remainder of the disk.
To create a bootable hard disk, replace "c:" for "a:" in the above example. When you use c:, vxsys.com will ask you the following:
That's a hard disk! Are you sure (y/n)?You should enter a "y" to indicate approval of the operation. Be aware that this will prevent other operating systems from booting on the disk.
The usage of the two VxWorks boot utilities is as follows:
STATUS mkbootFd ( int drive, /* destination drive number: (0 - 3) */ int fdType, /* type of floppy disk: (0 - 1) */ char *in /* source file name */ ) STATUS mkbootAta ( int ctrl, /* dest. controller number: (0 - 1) */ int drive, /* dest. drive number: (0 - 1) */ char *in /* source file name */ )All routines return OK on success and ERROR if there is an error while copying the image from the source onto the disk. The source code for these routines is in the BSP file mkboot.c. The following examples are showing how to prepare a floppy disk and the compact flash device for booting an image.
- Example 1
The floppy disk is in drive 0, the diskette is of type 0, and the image file name is bootrom.sys:
-> mkbootFd 0, 0, "bootrom.sys"Please note, that this routine will only work for floppy's, connected on the floppy disk controller. It will not work on USB floppy's.
- Example 2
The compact flash is on ATA controller 0 and is drive number 0 (or c:). The image file name is bootrom.sys:
-> mkbootAta 0, 0, "bootrom.sys"
Once a disk has been prepared for booting the VxWorks bootstrap loader is present on the disk, and you don't need to repeat the complete procedure for new ROM images. Just copy a new boot image to the disk that has already had a boot sector installed.
Alternatively it is possible to copy the bootrom to a floppy or a compact flash with the popular Linux OS by help with the "dd" tool.
- Example
for floppy disk:
-> mount /media/floppy -> dd if=bootrom.bin of=/media/floppy/bootrom.sys -> umount /media/floppyfor compact flash:
-> mount /dev/sda1 /mnt (as root) -> dd if=bootrom.bin of=/mnt/bootrom.sys -> umount /mnt
The new mechanism saves the brand new bootrom image to the top of the physical memory in sysPhysMemTop( ), and restores it when reboot in sysToMonitor( ). The saved image is protected by the MMU during runtime of the VxWorks. This mechanism is independent of the BIOS boot devices, is faster and simpler than the current method. It also preserves the boot line. This reboot mechanism assumes that the brand new bootrom image is kept in the lower memory when it is saved. That means the bootrom image needs to be located in the upper memory. The FAST_REBOOT macro can be defined statically in config.h. The memory size LOCAL_MEM_SIZE may need to be increased for larger page sizes. Note that the bootrom image in your boot device needs to be updated before downloading the new VxWorks image that contains this mechanism. Fast reboot is not supported for SMP images.
It is possible to boot VxWorks on a Pentium class system via the network using PXE (the Preboot eXecution Environment). PXE support may be provided either by the BIOS on motherboards with integrated Ethernet ports, or by standalone Ethernet adapters with PXE ROMs. Many of the Intel PRO/100 cards (supported by the fei driver) with management features include PXE ROM support. The advantage to using PXE is that no floppy or hard disk is required (this is important given that support for floppy disk dives is becoming increasingly rare with newer PC systems).
A bootrom.pxe loader is provided for PXE booting VxWorks in addition to the regular bootrom.bin loader. The bootrom.pxe loader is virtually identical to the normal bootrom.bin, except that it has an extra block of padding prepended to it. When booting from disk, the vxld.bin loader is normally loaded by the BIOS at address 0x7C00. It then in turn loads the bootrom at address 0x8000 and starts it running. By contrast, when booting with PXE, the bootrom is loaded directly at address 0x7C00 by the PXE ROM. A leading block of 1024 NOP instructions is therefore used to force the actual romInit( ) entry point to fall at address 0x8000, just as it would as if it had been loaded from disk. Once loaded and running, bootrom.pxe will be able to load VxWorks images via the network just as the normal bootrom.bin does.
PXE booting requires the use of a DHCP and TFTP server. When the PXE ROM starts up, it will use DHCP to discover an IP address and the path for the bootrom file. Generally, the PXE ROM assumes that the DHCP and TFTP servers will be running on the same machine. Exactly how you configure the DHCP and TFTP servers will depend on what software is used. DHCP and TFTP support is available for most *NIX/Linux/*BSD systems, as well as for Microsoft Windows (R).
For more information on how to configure a DHCP and TFTP server for PXE boot on your host machine please refer to the used operating systems and appropriate applications documentation.
Once the setup has been done, reboot the PXE client system. It should display output similar to the following:
CLIENT MAC ADDR: 00 00 E8 01 02 03 GUID: xxxxxxxx xxxx xxxx xxxx xxxxxxxxxxxx CLIENT IP: 10.0.0.3 MASK: 255.255.255.0 DHCP IP: 10.0.0.1 GATEWAY IP: 10.0.0.1 TFTP...Very shortly after this output appears, the VxWorks bootrom should start up and the bootrom startup banner should be displayed. At this point, you can enter the desired VxWorks boot parameters and use the bootrom to load a VxWorks image.
To create PXE romable images type for GEI type the following command:
make bootrom.pxeImportant notes:
- PXE is a 16-bit real mode environment. Consequently, boot applications
downloaded via PXE are limited in that they must be able to start up
in 16-bit real mode, and they must be less than 640K in size. The
VxWorks bootrom.bin image meets these requirements, however standalone
VxWorks images might not.
- The PXE environment also provides a universal API for accessing the
underlying Ethernet device, however VxWorks has no support for this
feature. This means that while you can download the VxWorks bootrom
via any PXE-enabled Ethernet device, a native driver for the Ethernet
device must be available in VxWorks in order for the bootrom to
subsequently download a VxWorks image (or for the downloaded VxWorks
image to be able to use the Ethernet port).
none